#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
照片自动分类器 - Python打包脚本
双击运行即可打包
"""

import os
import sys
import subprocess
import shutil

def main():
    print("=" * 60)
    print("照片自动分类器 - 打包工具")
    print("=" * 60)
    print()

    # 检查当前目录
    print("[1/5] 检查当前目录...")
    if not os.path.exists("PhotoClassifier.py"):
        print("错误：未找到 PhotoClassifier.py")
        print("请确保在正确的目录运行此脚本")
        input("\n按回车键退出...")
        sys.exit(1)
    print("[OK] 当前目录正确")
    print()

    # 检查Python和依赖
    print("[2/5] 检查Python环境...")
    try:
        import PyInstaller
        print(f"[OK] PyInstaller 已安装 (版本: {PyInstaller.__version__})")
    except ImportError:
        print("[X] PyInstaller 未安装")
        print("正在安装 PyInstaller...")
        subprocess.check_call([sys.executable, "-m", "pip", "install", "pyinstaller"])
        print("[OK] PyInstaller 安装完成")

    try:
        import pillow_heif
        print(f"[OK] pillow-heif 已安装 (版本: {pillow_heif.__version__})")
    except ImportError:
        print("[警告] pillow-heif 未安装，HEIC支持将不可用")
    print()

    # 清理旧文件
    print("[3/5] 清理旧文件...")
    if os.path.exists("dist"):
        print("  删除 dist 文件夹...")
        shutil.rmtree("dist")
    if os.path.exists("build"):
        print("  删除 build 文件夹...")
        shutil.rmtree("build")
    for spec_file in [f for f in os.listdir(".") if f.endswith(".spec")]:
        print(f"  删除 {spec_file}...")
        os.remove(spec_file)
    print("[OK] 清理完成")
    print()

    # 开始打包
    print("[4/5] 开始打包...")
    print("这将需要3-5分钟，请耐心等待...")
    print("-" * 60)

    cmd = [
        sys.executable, "-m", "PyInstaller",
        "--noconfirm",
        "--onefile",
        "--windowed",
        "--name=照片自动分类器",
        "--add-data=name_classifier.py;.",
        "--hidden-import=pillow_heif",
        "--hidden-import=_pillow_heif",
        "--hidden-import=cv2",
        "--hidden-import=numpy",
        "--hidden-import=PIL.Image",
        "--hidden-import=PIL.ImageTk",
        "--hidden-import=PIL.ImageDraw",
        "--hidden-import=ttkbootstrap",
        "--collect-all=pillow_heif",
        "--collect-all=ttkbootstrap",
        "PhotoClassifier.py"
    ]

    try:
        result = subprocess.run(cmd, check=True, capture_output=False)
        print("-" * 60)
        print("[OK] 打包完成")
    except subprocess.CalledProcessError as e:
        print("-" * 60)
        print(f"[X] 打包失败: {e}")
        input("\n按回车键退出...")
        sys.exit(1)
    print()

    # 验证结果
    print("[5/5] 验证打包结果...")
    exe_path = os.path.join("dist", "照片自动分类器.exe")
    if os.path.exists(exe_path):
        size = os.path.getsize(exe_path)
        print(f"[OK] 成功生成: {exe_path}")
        print(f"  文件大小: {size:,} 字节 ({size/1024/1024:.1f} MB)")
        print()
        print("=" * 60)
        print("打包成功！")
        print("=" * 60)
        print()
        print("重要说明：")
        print("1. 打包后的程序已包含HEIC格式支持")
        print("2. 用户无需安装Python即可直接运行")
        print("3. 如果用户遇到HEIC加载问题，可能需要安装VC++运行库")
    else:
        print("[X] 错误：未找到生成的exe文件")
        print("打包可能失败，请检查上面的错误信息")

    print()
    input("按回车键退出...")

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n用户中断")
        sys.exit(0)
    except Exception as e:
        print(f"\n错误: {e}")
        import traceback
        traceback.print_exc()
        input("\n按回车键退出...")
        sys.exit(1)
